	/*
	 * jQuery MB Table 1.0
	 *
	 * Copyright 2011, Marcin Baniowski
	 *
	 *	Depends:
	 *	jquery.ui.core.js
	 *	jquery.ui.widget.js
	 *	jquery.cookie.js
	 */
	// TODO - loader do ustawień
	// TODO - jeżeli przy edycji nie zmieni się wartość pola - nie przesyłać ajaxem - odpowiedni alert
	// TODO - pobranie info o tabeli (np. ilość wszytkich rekordów - tylko w _create
	// TODO - pobierania do paginacji w _init [?]
	// TODO = $.cookie do zapamiętywania strony
	// TODO - !!! do zapamiętywania stron w cookies - do nazwy cookie dodać nazwę instancji mbtable
	// TODO - live search - z ładowaniem danych do osobnej tablicy js [?]; albo:
	// TODO - filtry - w każdej kolumnie jedno pole u góry tabeli
	// TODO - czytanie wszystkich pól tabeli z bazy - możliwość zmiany nazwy w nagłówku
	// TODO - sortowanie po nagłówkach
	// TODO - nazwa tabeli do options
	(function($) {
		$.widget("mb.mbtable", {
			options: {
				url: null,
				limit: 20,
				primaryKey: null,
				order: {
					column: null,
					direction: 'asc'
				},
				fields: null,
				table: null
			},

		_create: function() {
			if($.cookie('page_number'))
				var page = $.cookie('page_number');
			else
				var page = 0;
			this.goToPage(page);
		},

		_init: function(){

		},
		
		goToPage: function(pageId){
			var el = this.element;
			el.empty();
			var self = this;
			var o = this.options;
			var rowsTotal = 0;
			var table = $('<table />').addClass('mbtable');
			var pagWrap = $('<div />').addClass("mb-table-pagination");
			el.html('<img src="images/ajax-loader-1.gif" />');
			// pola tabeli
//			var fields = o.fields;
			var fe = "[";
			for(var j in o.fields ){
				fe += '{"old":"'+j+'","my":"'+o.fields[j]+'"},';
			}
			var fields = fe.substring(0, fe.length-1);
			fields += "]";
			$.ajax({
				url: o.url,
				type: "post",
				data: "action=getdata&page="+pageId+"&limit="+o.limit+"&order_col="+o.order.column+"&order_dir="+o.order.direction+"&fields="+fields+"&table="+o.table+"&pk="+o.primaryKey,
				dataType: 'json',
				success: function(result){
//					console.log(result.cols_names);return false;
					rowsTotal = result.count;
					var tr = '';
					var td = '';
					var th = '';
					// table header
					tr = $('<tr />');
					for (var j in result.data[0]){
						th = $('<th />').html(j);
						th.appendTo(tr);
					}
					$('<thead />').append(tr).appendTo(table);
					// table data
					var tbody = $('<tbody />');
					for(i=0;i<result.data.length;i++){
						tr = $('<tr />');
						var n = 0;
						for (var j in result.data[i]){
							if(n == 0)
								td = $('<td />').addClass('td-first').html(result.data[i][j]);
								else td = $('<td />').attr('id',result.data[i]['ID']+'_|_'+result.cols_names[j]).html(result.data[i][j]);
							
							td.appendTo(tr);
							n++;
						}
						tr.appendTo(tbody);
					}
					tbody.appendTo(table);
					// edit event
					table.find('td').bind('dblclick.mbtable',function(){
						var field_id = $(this).attr('id');
						self.editcell($(this));
					})
//					table.appendTo(el);
//					el.html(table);

					// pagination
					var pagesNumber = Math.ceil(rowsTotal / o.limit);
					var anchor = "";
					for(i=0;i<pagesNumber;i++){
						if(i == pageId)
							anchor = $("<div />").addClass('active').text(i+1);
						else
							anchor = $("<div />").text(i+1);
						anchor.bind('click.mbtable',function(){
							var val = $(this).text()*1-1;
							$.cookie('page_number',val)
							self.goToPage(val);
						})
						anchor.appendTo(pagWrap);
					}
					el.empty();
					el.html(table);
					pagWrap.insertAfter(table);
				}
			});
		},

		editcell: function(obj){
			self = this;
			var cont = obj.text();
			var editOk = $('<button />').text('Ok');
			var editCancel = $('<button />').text('Anuluj');
			var input = $('<input />').attr('type','text').val(cont);
			input.insertAfter(obj);
			editOk.insertAfter(input);
			editCancel.insertAfter(input);
			obj.hide();
			editCancel.bind('click.mbtable',function(){
				input.hide();
				editCancel.hide();
				editOk.hide();
				obj.show();
			});
			editOk.bind('click.mbtable',function(){
				var loader = '<img src="images/ajax-loader-1.gif" />';
				input.hide();
				editCancel.hide();
				editOk.hide();
				obj.html(loader);
				obj.show();
				var res = self._updateData(input.val(),obj.attr('id'));
				if(res == 1){
					alert("Dane poprawnie zmienione");
					obj.text(input.val());
				}else{
					alert('Wystąpił błąd zapisu danych');
					obj.text(cont);
				}
			});
			this._trigger('editcell');
		},

		_updateData: function(value,id){
			var o = this.options;
			var res = "";
			$.ajax({
				url: o.url,
				type: "post",
				data: "action=updatedata&value="+value+"&id="+id+"&table="+o.table+"&pk="+o.primaryKey,
//				dataType: 'json',
				success: function(result){
					res = result;
				},
				async: false
			});
			return res;
		},

		destroy: function() {
			
		}

		});
	})(jQuery);